This disclosure relates generally to the field of data communication, and more specifically to managing data flow in a system.
Data communication systems include senders and receivers. A sender, such as a PCI Express card or a hard drive cache, sends data packets through a communicative link, such as a bus, to a receiver, such as a memory controller. The receiver stores the data packets in buffers until the receiver is ready to process the data packets. If the sender sends data packets to the receiver and the receiver has no available buffers to store the packets, an overflow may occur, slowing the transmission of data.
A previous method to avoid buffer overflows directs the receiver to send flow control messages to the sender before the sender is allowed to send data packets. The flow control messages update the sender with a number of free buffers in the receiver. One drawback to that method is that over non-trivial distances, by the time a sender receives a flow control message, more buffers may have become free. This leads to underutilization of bandwidth and underutilization of buffers.
One technique currently used to address the underutilization of bandwidth is to increase the number of buffers in the receiver. While this technique may decrease the underutilization of bandwidth, this technique may result in an underutilization of buffers.
It is desirable for a method that both increases buffer utilization and bandwidth utilization.